package Comprehensive_02;

import java.util.Arrays;

public class Test {
    /*
        定义数组并存储一些女朋友对象，利用Arrays中的sort方法进行排序
        要求1：属性要有姓名、年龄、身高。
        要求2：按照年龄的大小进行排序。年龄一样，按照身高进行排序，身高一样按照姓名的字母进行排序。
        （姓名不能是中文或者特殊字符，会涉及到后面的知识）
     */
    public static void main(String[] args) {
        // 1.创建三个女朋友对象。
        GrilFriend gf1 = new GrilFriend("guanpeixing", 20, 1.55);
        GrilFriend gf2 = new GrilFriend("dingbiyu", 18, 1.65);
        GrilFriend gf3 = new GrilFriend("tangjingyi", 14, 1.46);
        GrilFriend gf4 = new GrilFriend("liuzixing", 18, 1.58);
        GrilFriend gf5 = new GrilFriend("zhangqiaolian", 18, 1.65);
        // 2.定义数组存储女朋友的信息
        GrilFriend[] arr = {gf1, gf2, gf3, gf4, gf5};

        // 3.利用Arrays中的sort进行排序
        // 匿名内部类 Lambda表达式
//        Arrays.sort(arr, new Comparator<GrilFriend>() {
//            @Override
//            public int compare(GrilFriend o1, GrilFriend o2) {
//                double temp = o1.getAge() - o2.getAge();
//                temp = temp == 0 ? o1.getHeight() - o2.getHeight() : temp;
//                temp = temp == 0 ? o1.getName().compareTo(o2.getName()) : temp;
//
//                if (temp > 0) {
//                    return 1;
//                } else if (temp < 0) {
//                    return -1;
//                } else {
//                    return 0;
//                }
//            }
//        });

        // lambda表达式
        // () -> {}
        // () : 对应折抽象方法的形参
        // {} ：方法体
        Arrays.sort(arr, (o1, o2) -> {
            double temp = o1.getAge() - o2.getAge();
            temp = temp == 0 ? o1.getHeight() - o2.getHeight() : temp;
            temp = temp == 0 ? o1.getName().compareTo(o2.getName()) : temp;

            if (temp > 0) {
                return 1;
            } else if (temp < 0) {  
                return -1;
            } else {
                return 0;
            }
        });


        // 4.打印数组中的数据
        System.out.println(Arrays.toString(arr));
    }
}

class GrilFriend {
    private String name;
    private int age;
    private double height;

    public GrilFriend() {
    }

    public GrilFriend(String name, int age, double high) {
        this.name = name;
        this.age = age;
        this.height = high;
    }

    /**
     * 获取
     *
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     *
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     *
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     *
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    /**
     * 获取
     *
     * @return high
     */
    public double getHeight() {
        return height;
    }

    /**
     * 设置
     *
     * @param height
     */
    public void setHeight(double height) {
        this.height = height;
    }

    public String toString() {
        return "GrilFriend{name = " + name + ", age = " + age + ", high = " + height + "}";
    }
}
